<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>video</title>
</head>
<body>
<h2 style="text-align: center;">这是主播页面</h2>
<video id="video" width="500px" height="500px" autoplay="autoplay"></video>
<canvas id="canvas" width="500px" height="500px"></canvas>
<button onclick="start()">开始直播</button>
<button onclick="stop()">停止直播</button>
<script>
    //获得video摄像头区域
    var video = document.getElementById("video");
    var canvas = document.getElementById("canvas");
    var ctx = canvas.getContext('2d');

    // function getMedia() {
    //     var constraints = {
    //         video: {width: 500, height: 500},
    //         audio: false
    //     };
    //     /*
    //     这里介绍新的方法:H5新媒体接口 navigator.mediaDevices.getUserMedia()
    //     这个方法会提示用户是否允许媒体输入,(媒体输入主要包括相机,视频采集设备,屏幕共享服务,麦克风,A/D转换器等)
    //     返回的是一个Promise对象。
    //     如果用户同意使用权限,则会将 MediaStream对象作为resolve()的参数传给then()
    //     如果用户拒绝使用权限,或者请求的媒体资源不可用,则会将 PermissionDeniedError作为reject()的参数传给catch()
    //     */
    //     var promise = navigator.mediaDevices.getUserMedia(constraints);
    //     promise.then(function (MediaStream) {
    //         video.srcObject = MediaStream;
    //         video.play();
    //     }).catch(function (PermissionDeniedError) {
    //         console.log(PermissionDeniedError);
    //     })
    // }

    // getUserMedia 被标准废除了，mediaDevices 正在取代中
    if (navigator.mediaDevices === undefined) {
        navigator.mediaDevices = {};
    }

    // 一些浏览器部分支持 mediaDevices。我们不能直接给对象设置 getUserMedia
    // 因为这样可能会覆盖已有的属性。这里我们只会在没有getUserMedia属性的时候添加它。
    if (navigator.mediaDevices.getUserMedia === undefined) {
        navigator.mediaDevices.getUserMedia = function (constraints) {

            // 首先，如果有getUserMedia的话，就获得它
            var getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia;

            // 一些浏览器根本没实现它 - 那么就返回一个error到promise的reject来保持一个统一的接口
            if (!getUserMedia) {
                return Promise.reject(new Error('getUserMedia is not implemented in this browser'));
            }

            // 否则，为老的navigator.getUserMedia方法包裹一个Promise
            return new Promise(function (resolve, reject) {
                getUserMedia.call(navigator, constraints, resolve, reject);
            });
        }
    }
    var constraints = {video: true};
    navigator.mediaDevices.getUserMedia(constraints)
        .then(function (stream) {
            // 旧的浏览器可能没有srcObject
            if ("srcObject" in video) {
                video.srcObject = stream;
            } else {
                // 防止在新的浏览器里使用它，应为它已经不再支持了
                video.src = window.URL.createObjectURL(stream);
            }
            video.onloadedmetadata = function (e) {
                video.play();
            };
        })
        .catch(function (err) {
            console.log(err.name + ": " + err.message);
        });


    var socket = new WebSocket("wss://172.16.150.148:443/v?video");
    //打开socket

    socket.onopen = function () {
        console.log("open success")
    };

    //接收到消息的回调方法
    socket.onmessage = function (event) {
        console.log(event)
    };

    //连接关闭的回调方法
    socket.onclose = function () {
        console.log("close");
    };

    var interval;

    function start() {
        interval = window.setInterval(function () {
            ctx.drawImage(video, 0, 0, 500, 500);
            socket.send(canvas.toDataURL("image/jpeg", 0.5));
        }, 60);
    }

    function stop() {
        clearInterval(interval)
    }
</script>
</body>
</html>